package J.算法.滑动窗口;

import java.util.HashMap;
import java.util.Map;

public class _3无重复字符的最长子串 {
    /**
     * 1扩大：判断新增元素是否在窗口有=====应该是window计数
     * 2.何时缩小 当有重复元素就缩小
     * 3.何时出结果：缩小的时候有重复值 缩小玩就没了
     *
     * ==不用匹配 所以不需要need
     *
     * 题解：：window存的是index
     *
     * @param s
     * @return
     */
    public int lengthOfLongestSubstring(String s) {

        if (s.length()==0){
            return 0;
        }
        Map<Character,Integer> window = new HashMap<>();

        int left=0,right =0;
        int len = Integer.MIN_VALUE;

        while (right<s.length()){

            char in = s.charAt(right);
            right++;

            //窗口内数据更新
            window.put(in,window.getOrDefault(in,0)+1);

            //缩小
            while (window.get(in) >1 ){
                char out = s.charAt(left);
                left ++;
                window.put(out,window.getOrDefault(out,1)-1);
            }

            len = Math.max(len,right-left);

        }

        return len;


    }
}
